home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / PATH_ENV / PATHS.D < prev    next >
Encoding:
Modula Definition  |  1990-05-31  |  3.9 KB  |  118 lines

  1. DEFINITION MODULE Paths;
  2.  
  3. !!!
  4.   > vielleicht ein Modul "TextLists" erstellen, das speziell für Listen
  5.     von Strings ausgelegt ist.
  6.     Der Puffer kann dann entweder beim Öffnen auf eine statische Größe
  7.     alloziert werden oder ggf auch ein dynamischer Modus aktiviert
  8.     werden.
  9.     Dies Modul könnte dann von CallModule auch für die 'driver'-Liste
  10.     verwendet werden.
  11.     Vielleicht läßt sich das auch mit den STR-Dateien, wie bei Hänisch,
  12.     kombinieren?
  13.  
  14. (*
  15.  * Verwaltet Listen von Pfadnamen und bietet Funktionen, um Dateien
  16.  * auf diesen Pfaden zu suchen.
  17.  *)
  18.  
  19. FROM SYSTEM IMPORT ADDRESS, LOC;
  20. FROM MOSGlobals IMPORT MemArea;
  21.  
  22. TYPE    PathList = RECORD
  23.                      buf : MemArea; (* s. Anmerkung gleich unten *)
  24.                      heap: BOOLEAN;
  25.                      seps: ARRAY [0..1] OF CHAR
  26.                    END;
  27.           (*
  28.            * Anmerkung: Ist 'mem.length' Null, wird 'mem.bottom'
  29.            * schlicht als Zeiger auf einen Null-terminierten String
  30.            * beliebiger Länge verwendet. So kann der String nachträglich
  31.            * verlängert werden, allerdings nicht mit den hiesigen, sonst
  32.            * dafür vorgesehenen, Funktionen, sondern durch Direktzugriff
  33.            * auf den String.
  34.            *)
  35.  
  36. (*
  37.  * Auswerten der Pfadlisten
  38.  * ------------------------
  39.  *)
  40.  
  41. problem:
  42.   die pfadlisten sind nun extern, beim aufrufer, gespeichert. dort werden
  43.   ggf. mehrere pro prozeß angelegt.
  44. (*
  45.  * Verwalten der Pfadlisten
  46.  * ------------------------
  47.  *)
  48.  
  49.         (*
  50.          * Trennzeichen zwischen den Pfaden:
  51.          *)
  52.         Separator = (dftSep,       (* internes Zeichen, unbestimmt   *)
  53.                      lineSep,      (* CR/LF (zeilenweise)            *)
  54.                      spcSep,       (* Leerzeichen                    *)
  55.                      envSep);      (* ';' (für Environment-Variable) *)
  56.  
  57. PROCEDURE InitPathList (VAR handle: PathList);
  58.   (*
  59.    * Setzt 'handle' in einen definierten Zustand:
  60.    * Die Liste enthält keine Pfade.
  61.    *)
  62.  
  63. PROCEDURE CreatePathList (VAR handle: PathList; size: LONGCARD);
  64.   (*
  65.    * Legt einen Pfad-Puffer mit 'size' Bytes mithilfe der
  66.    * ALLOCATE-Funktion aus Storage an.
  67.    * Als Separator wird erstmal der Interne ('dftSep') definiert.
  68.    * Der Puffer wird gelöscht.
  69.    *
  70.    * Am Ende sollte der Puffer mit 'DeletePathList' wieder freigegeben
  71.    * werden.
  72.    *)
  73.  
  74. PROCEDURE DeletePathList (VAR handle: PathList);
  75.   (*
  76.    * Gibt einen mit 'CreatePathList' reservierten Puffer wieder frei.
  77.    *)
  78.  
  79. PROCEDURE DefinePathList (VAR handle: PathList; buffer: MemArea);
  80.   (*
  81.    * Alternativ zu 'CreatePathList' kann mit dieser Funktion ein
  82.    * bereits angelegter Puffer (z.B. durch 'SysAlloc' oder eine
  83.    * globale Variable) als Pfadlisten-Puffer initialisiert werden.
  84.    * Als Separator wird erstmal der Interne ('dftSep') definiert.
  85.    * Der Puffer wird gelöscht.
  86.    *)
  87.  
  88. PROCEDURE SetPathList (VAR handle: PathList; buffer: MemArea; sep: Separator);
  89.   (*
  90.    * Wie 'DefinePathList', nur wird davon ausgegangen, daß der
  91.    * angegebene Puffer bereits eine Pfadliste enthält, er wird also
  92.    * nicht gelöscht. Das verwendete Trennzeichen ist in 'sep' anzugeben.
  93.    * Anwendung findet diese Funktion, wenn z.B. die Environment-Variable
  94.    * "PATH" für eine Pfadliste verwendet werden soll (näheres im Modul
  95.    * 'Environment', Funktion 'ArgMEM'.
  96.    *)
  97.  
  98. PROCEDURE ClearPathList (VAR handle: PathList);
  99.   (*
  100.    * Löscht den Puffer
  101.    *)
  102.  
  103. PROCEDURE Separate (handle: PathList; sep: Separator);
  104.   (*
  105.    * Die Pfade werden mit den in 'sep' angegebenen Trennzeichen
  106.    * getrennt.
  107.    * Dies ist sinnvoll, wenn danach die Liste ausgegeben werden soll,
  108.    * beispielsweise in eine Datei: Wird 'Separate (path, lineSep)'
  109.    * aufgerufen und danach die .............
  110.  
  111.    *)
  112.  
  113. PROCEDURE AppendPaths (from: PathList; VAR to: PathList);
  114.  
  115. PROCEDURE AppendPath (path: ARRAY OF CHAR; VAR to: PathList);
  116.  
  117. END Paths.
  118.